
package com.database.dao.impl;

import com.database.dao.PerfilDao;
import com.database.model.Perfil;
import com.database.util.HibernateUtil;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.hibernate.Session;

/**
 *
 * @author Diego y Yinna
 */
public class PerfilDaoImplement implements PerfilDao {

    @Override
    public void actualizar(Perfil perfil) {
        Session session= HibernateUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            session.merge(perfil);//En vez  de ser update, lo hago con merge por tener relacion con el usuario.(Error de 2 sesiones)
            session.beginTransaction().commit();//
        } catch (Exception e) {
            System.out.println("Error en actualizar Perfil" + e.getMessage());
            session.beginTransaction().rollback();
        }
    }

    @Override
    public Perfil buscarPorId(Integer id) {
        
        Session session= HibernateUtil.getSessionFactory().openSession();
        return (Perfil) session.load(Perfil.class, id);
        
    }

    @Override
    public List<Perfil> buscarTodos() {
        
        Session session= HibernateUtil.getSessionFactory().openSession();
        return session.createQuery("from Perfil per order by per.nombre asc").list();
    }

    @Override
    public void insertar(Perfil perfil) {
          Session session= HibernateUtil.getSessionFactory().openSession();
         FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.save(perfil);
             session.beginTransaction().commit();
             context.addMessage(null, new FacesMessage("Se ha guardado "+perfil.getNombre()+" con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al guardar"+e.getMessage())); 
             session.beginTransaction().rollback();
         }
    }

    @Override
    public void eliminar(Perfil perfil) {
        Session session= HibernateUtil.getSessionFactory().openSession();
        FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.delete(perfil);
             session.beginTransaction().commit();
             context.addMessage(null, new FacesMessage("Se ha eliminado "+perfil.getNombre()+" con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al eliminar:"+e.getMessage())); 
             session.beginTransaction().rollback();
         }
    }
    
    
    
}
